package com.sugon.dao;

import com.sugon.entity.ModuleRepairRocordEntity;
import com.sugon.entity.dto.DevMoldFaultDurationCommonVO;
import com.sugon.entity.dto.DevMoldFaultDurationDetailVO;
import com.sugon.entity.dto.MoldRepairTicketExportParam;
import com.sugon.modules.analyse.model.dto.MoldFaultRateStatResultDTO;
import com.sugon.modules.mold.model.dto.MoldYearlyFaultStatDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 模具报修记录Dao
 *
 * @author sugon
 * @date 2019-08-15 09:07:09
 */
public interface ModuleRepairRocordDao extends BaseDao<ModuleRepairRocordEntity> {

    /**
     * 统计制定月份下 特定车间的特定模具类型下的统计了多少条模具模次记录
     *
     * @param workshopId   车间ID
     * @param moldTypeList 模具类型ID
     * @param monthList    月份列表
     * @return
     */
    List<MoldFaultRateStatResultDTO> doMoldFaultDurationMonthlyStat(@Param("workshopId") String workshopId, @Param("moldTypeList") List<String> moldTypeList, @Param("monthList") List<String> monthList);

    /**
     * 统计指定车间的特定时间区间内的工单完成数
     *
     * @param workshop  车间ID
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return
     */
    int countTodayCompleteNum(@Param("workshop") String workshop, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 获取设备故障类型时长统计
     * 统计指定故障类型 发生的累计时长
     * 比如
     * 压力开关： 2135
     *
     * @param param
     * @return
     */
    List<DevMoldFaultDurationDetailVO> getFaultTypeDurationStat(Map<String, Object> param);

    /**
     * 统计模具故障时间明细
     * 即统计某台设备在哪个时间段发生了故障
     * 只关系时长，不关系发生了什么故障
     *
     * @param param
     * @return
     */
    List<DevMoldFaultDurationCommonVO> statMoldFaultDurationItem(Map<String, Object> param);

    /**
     * updateStatus
     *
     * @param id 模具报修记录ID
     * @return
     */
    int updateStatus(String id);

    /**
     * queryObject2
     *
     * @param id 模具报修记录ID
     * @return
     */
    ModuleRepairRocordEntity queryObject2(String id);

    /**
     * 模具故障次数TOP统计
     *
     * @param params 包含起止时间段和TOP次数
     * @return
     */
    List<Map<String, Object>> mouldFaultTimesTopStat(Map<String, Object> params);

    /**
     * 模具故障分类次数统计
     * 统计每个模具故障分类发生的次数
     *
     * @param params 参数包含 month，moldTypeId，dept
     * @return
     */
    List<Map<String, Object>> mouldFaultClassifyTimesTopStat(Map<String, Object> params);

    /**
     * 模具成本统计
     *
     * @param params 参数包含 year，moldTypeId，dept
     * @return
     */
    List<Map<String, Object>> moldCostStat(Map<String, Object> params);

    /**
     * 获取以codePrefix为前缀的最新值
     *
     * @param codePrefix 编码前缀
     * @return
     */
    String getLastestRepairTicketCode(@Param("codePrefix") String codePrefix);

    /**
     * 统计某年份下指定模具不同月份下的故障信息
     * 包括故障次数、故障总时长
     *
     * @param yearly   年度
     * @param moldCode 模具编码
     * @return
     */
    List<MoldYearlyFaultStatDTO> doYearlyMoldFaultStat(@Param("yearly") Integer yearly, @Param("moldCode") String moldCode);

    /**
     * 准备导出的模具维修记录数据
     *
     * @param params
     * @return
     */
    List<MoldRepairTicketExportParam> prepareExportData(Map<String, Object> params);

}
